Redis
,全名為 Remote Dictionary Server,是一種快速、開放原始碼、Key-Value
類型、in-memory
、的NoSQL
資料庫。
Redis
的重點在速度、效能極高,在一些須重視速度的開發場合,就很適合使用Redis
來輔助開發,在高速讀取時不用每一筆資料都對資料庫進行query
,只需要讀取記憶體就能獲取資料。
Redis
官方只提供linux
與mac
版本的安裝檔,因此windows
版的只能自己從其他地方下載,這邊只找到5.0
版本的
Redis 5.0.14.1
https://redis.io/download/
將Redis
解壓縮丟到資料夾後,從cmd
開啟資料夾內的redis-server.exe
,啟動server
。
開啟另一cmd
頁面,執行redis-cli.exe
,輸入ping
後有回應代表連線成功。
安裝套件go get github.com/gomodule/redigo/redis
package main
import (
"fmt"
"log"
"github.com/gomodule/redigo/redis"
)
// "sort"
func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil{
log.Fatal(err)
}
defer conn.Close()
fmt.Println(conn)
}
存入一個id:1001
的數值
func String(){
// 連線與設定關閉
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil{
log.Fatal(err)
}
defer conn.Close()
// 存入id
_, err = conn.Do("set", "id", 1001)
if err != nil{
log.Fatal(err)
}
}
到main
的地方測試
func main() {
String() // 存入文字
// 連線與設定關閉
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
defer conn.Close()
if err != nil{
log.Fatal(err)
}
// 使用get方法取得id資料
res, err := redis.Int(conn.Do("get","id"))
if err != nil{
log.Fatal(err)
}
fmt.Println(res)
}
output:
1001
成功寫入
通常在使用redis
時會通過connection pool
(連接池)來幫助連線,需要連接redis
時則從池子裡拉一條出來用,用完要記得釋放。
var pool *redis.Pool
func main(){
pool = &redis.Pool{
MaxIdle: 8, //最大空閒連接數
MaxActive: 0, // 最大連接數,0表示沒限制
IdleTimeout: 100, // 最大空閒時間
Dial: func() (redis.Conn, error) {
//建構連線
return redis.Dial("tcp", "127.0.0.1:6379")
},
//定期對 redis server 做 ping/pong 測試
TestOnBorrow: func(c redis.Conn, t time.Time) error {
if time.Since(t) < time.Minute {
return nil
}
_, err := c.Do("PING")
return err
},
}
defer pool.Close()
}
把上面的寫入與讀取修正成使用pool
的方式運行
func String(pool *redis.Pool){
conn := pool.Get()
defer conn.Close()
_, err := conn.Do("set", "id", 1001)
if err != nil{
log.Fatal(err)
}
}
func GetId(pool *redis.Pool) int{
conn := pool.Get()
defer conn.Close()
res, err := redis.Int(conn.Do("get","id"))
if err != nil{
log.Fatal(err)
}
return res
}
Redis
的部分應該就到這了,發現這兩天講的真的都不夠深,但還沒有實際應用的狀況下我也不大會寫,就都只做了基本的運作而已。
Redis 安装
https://www.runoob.com/redis/redis-install.html
golang:使用redigo连接并操作Redis
https://blog.csdn.net/lena7/article/details/120345051
Go-Redis 连接池(Pool)源码分析
https://pandaychen.github.io/2020/02/22/A-REDIS-POOL-ANALYSIS/
Golang 如何使用 redis
https://ithelp.ithome.com.tw/articles/10208335